iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
Modern Web

Full Stack Web Development 網站實作系列 第 6

Day 6 使用Next.js - 開始 coding 一個非常簡單的 blog (1)

  • 分享至 

  • xImage
  •  

Setup 好 Next.js 環境後,可以開始 coding,做一個非常簡單的 blog。

https://ithelp.ithome.com.tw/upload/images/20220921/20129584LHz4v4haQM.png

首先,在 n02-blog/pages 目錄下,新增一個檔案 index.js,在這個檔案建立第一個 React 元件(component),這個元件也是這程式的預設輸出(default export)。

const Index = () => (
  <div>
    <h2>Home page</h2>
    <h1>華國美學 超越藍綠 </h1>
  </div>
)

export default Index

存檔後,在終端機(terminal)下,執行 npm run dev 指令,啟動 Next 開發環境的 server。
這個 app 就可以在 localhost 的 port 3000 被打開使用,開啟瀏覽器,輸入 localhost/3000 出現如下畫面:
https://ithelp.ithome.com.tw/upload/images/20220921/201295848cYo1M3Mdy.png

在這個 index.js 程式裡,有一個 index 元件,這個元件提供這 app(這個網站)路徑(route) '/' 的服務。

接下來,新增第二個網頁,到這個 app(網站),新的網頁將放 blog 的內容,它的路徑將是 /blog。這是一個簡單靜態(static)網頁,就像第一個 index.js 一樣。
新增程式 n02-blog/pages/blog.js

const Blog = () => (
  <div> 
    <h2>Blog</h2>
    <h1>Welcome to 福興穀倉 鐵皮屋加蓋</h1>
    <h1>欣賞彰化縣兩任女縣長綠營翁金珠 藍營王惠美執政下的文化局, </h1>
    <h1>哪著全國人民納稅錢, 接力把日本時代建築打造成華國美學建築.</h1>
  </div>
)

export default Blog

https://ithelp.ithome.com.tw/upload/images/20220921/201295843WeKNSrhD3.png
在瀏覽器上, 輸入 http://localhost:3000/blog ,就可以看到新的網頁。
https://ithelp.ithome.com.tw/upload/images/20220921/20129584158NJNyDE2.png
在 Next.js 下,路徑 /blog 就是跟據檔案名稱來的,而且這個檔案要位在 pages 目錄下。
所以,你建立一個 pages/blog.js,它在瀏覽器上的位址就是 http://localhost:3000/blog ,要注意是元件名稱不會影響路徑,所以我們的 blog.js 可以輸出一個沒有名稱的元件 export default () 。

export default () => (
  <div> 
    <h2>Blog</h2>
    <h1>Welcome to 福興穀倉 鐵皮屋加蓋</h1>
    <h1>欣賞彰化縣兩任女縣長綠營翁金珠 藍營王惠美執政下的文化局, </h1>
    <h1>哪著全國人民納稅錢, 接力把日本時代建築打造成華國美學建築.</h1>
  </div>
)

我們也可以使用 non-arrow 函數語法 function() { } 。

export default function() {
  return (
    <div> 
      <h2>Blog</h2>
      <h1>Welcome to 福興穀倉 鐵皮屋加蓋</h1>
      <h1>欣賞彰化縣兩任女縣長綠營翁金珠 藍營王惠美執政下的文化局, </h1>
      <h1>哪著全國人民納稅錢, 接力把日本時代建築打造成華國美學建築.</h1>
    </div>
  )
}

鏈結兩個網頁(Linking the two pages):
現在我們可以將 index.js 和 blog.js 兩個網頁鏈結起來。
一般在 HTML 我們使用 標籤(tag)。

<a href="/blog">Blog</a>

但在 Next 下,我們也可這樣做,但我們不這麼做。原因如下:
因為,如果我們使用 標籤(tag) a 來鏈結:

const Index = () => (
  <div> 
    <h1>Home page</h1>
    <a href='/blog'>Blog</a>
    <h1>華國美學 超越藍綠 </h1>
    </div>
)

export default Index

修改 index.js 後,打開瀏覽器 DevTools 的 Network panel ,當我們第一次執行 http://localhost:3000
,會看到瀏覽器載入所有的 page bundles(所有的 index.js 需要的 JavaScript),(記得設定保留 log,避免資料被清掉)。
https://ithelp.ithome.com.tw/upload/images/20220921/20129584HCQwxhjNHy.png
接下來,點選 blog 鏈結,切換至 blog 網頁,我們會看到瀏覽器又重複載入所有的 page bundles。
https://ithelp.ithome.com.tw/upload/images/20220921/20129584Uf1JbPBScQ.png
我們不需要再重新載入這些我們之前就載入的東西,我們只需要載入 blog.js,這個網頁唯一需要被更新的東西。

解決這個問題,我們需要用 Next 提供的 Link 元件,並將程式 index.js 改寫如下:

import Link from 'next/link'

const Index = () => (
  <div> 
    <h1>Home page</h1>
    <h1>華國美學 超越藍綠 </h1>
    <Link href='/blog'>Blog</Link>
    </div>
)

https://ithelp.ithome.com.tw/upload/images/20221023/201295846fWOZjK8RF.png
https://ithelp.ithome.com.tw/upload/images/20220921/201295845mes41w2sg.png
再看瀏覽器的 Network 的 log,當我們切換至 blog 網頁時,只有 blog.js 和相關更新程式(webpack.1c....)被載入,這樣,加快了網頁更新的速度。這就是所謂的 client-side rendering。
如果我們現在按"回前頁",會發現沒有東西被重新載入,因為 Next 瀏覽器仍然還有 index.js,不需再到 server 去下載。


上一篇
Day 5 使用Next.js
下一篇
Day 7 使用Next.js - 開始 coding 一個非常簡單的 blog (2)
系列文
Full Stack Web Development 網站實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言